package org.ala.tiktools.mybatis.interceptor;

import org.ala.tiktools.mybatis.expand.ExpandData;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.Map;

/**
 * 注解拦截器
 * - 对于method上的一些特殊注解，拦截其invoke调用
 * - 如果method注册了多个特殊注解，则按sort升序执行
 * - 如果intercept方法返回了结果，则后续的interceptor不会执行
 *
 * @author ala
 * @date 2025-01-10 11:27
 */
public interface IAnnotationInterceptor<A extends Annotation> {


    /**
     *  要拦截的注解
     */
    Class<A> annotation();
    /**
     *  拦截方法
     *  <p> 如果返回空，则仍然调用原始的invoke
     */
    InterceptResult intercept(A anno, Object proxy, Method method, Object[] args, Map<String, ExpandData> expandDatas) throws Exception;
}
